The growth in network-based computing, which is also often referred to as “cloud computing”, has provided alternatives for designing and implementing computing resources, as compared with traditional approaches where a user (or entity) purchases hardware and software and then manages that hardware and software on an ongoing basis. Depending on the particular situation, such traditional approaches can be expensive, time-consuming and inefficient. For instance, hardware often becomes quickly obsolete, requiring periodic updates along with the associated time and expense of those updates. Additionally, for complex systems, keeping operating software (e.g., operating system software) and applications up-to-date and operating properly is expensive, time-consuming and often difficult to keep track of.
Network-based computing systems may be used to implement sets of computing resources for a user or set of users, such as for employees of a company, in a virtual manner. For instance, in certain implementations, a set of computing resources may be defined in a design template (also referred to herein as a “computing resources template” or “template”), where a given template represents a “live”, or “runtime state” of a desired set of computing resources. Such templates, for a given computing system platform, may be used to generate a homogeneous, normalized service blueprint (e.g., in the form of a directed acyclic graph) that may then be used to virtually deploy the desired set of computing resources (e.g., a set of virtual machines, network components, firewalls, etc.) in an independently managed computing (e.g., hardware and software) network, where such a network is maintained by an independent service provider. In such approaches, users may then access the virtual deployed resources over a computing network, such as the Internet or other computer network (e.g., “over the cloud”). Accordingly, such approaches provide users access to desired computing resources, with essentially equivalent functionality as traditional approaches, while alleviating the need for ongoing management of computing hardware and/or software by the user, users and/or entity for which the resources are virtually implemented.
In such approaches, service blueprints are generally implemented as directed, acyclic graphs that illustrate a collection of computing nodes (e.g., virtual machines, databases, servers, etc.) and the relationships (e.g., edges) between those computing nodes in normalized manner. As indicated above, such service blueprints are translated from a corresponding service template that represents a runtime state of the computing resources. While such approaches provide a flexible approach for designing and deploying a given set of computing resources, they have some drawbacks. For instance, translation programs for translating templates to service blueprints are usually platform specific and are not extensible across different (heterogeneous) platforms. Specifically, virtually deploying computing resources in a given network-computing platform using such an approach may require a platform specific translation program (or set of translation programs), thus requiring separate design templates in order to deploy resources that are distributed across different types of platforms. Further, as new network-based computing platforms become available, new virtual computing resources are made available on a given platform and/or the semantics (e.g., design template semantics) used for a given platform change or are enhanced, the related translation programs must be re-engineered and/or new translation programs must be generated by software engineers, which, again, is expensive, time consuming and inefficient.